package com.aliang.shopping.model.converter;

import com.aliang.shopping.model.dto.admin.AdminImportDTO;
import com.aliang.shopping.model.dto.admin.AdminInsertDTO;
import com.aliang.shopping.model.dto.admin.AdminUpdateDTO;
import com.aliang.shopping.model.dto.common.UpdatePasswordDTO;
import com.aliang.shopping.model.dto.common.UpdateStatusDTO;
import com.aliang.shopping.model.po.Admin;
import com.aliang.shopping.model.vo.CommonUserInfoVO;
import com.aliang.shopping.model.vo.admin.AdminExportVO;
import com.aliang.shopping.model.vo.admin.AdminVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;

import java.util.List;

/**
 * 管理员数据转换器
 */
@Mapper(componentModel = "Spring")
public interface AdminConverter {


    /**
     * 将管理员插入数据传输对象转换为管理员实体
     *
     * @param insertDTO
     * @return
     */
    Admin toPoByInsertDTO(AdminInsertDTO insertDTO);

    /**
     * 将管理员更新数据传输对象转换为管理员实体
     *
     * @param updateDTO
     * @return
     */
    Admin toPoByUpdateDTO(AdminUpdateDTO updateDTO);

    /**
     * 将管理员更新状态数据传输对象转换为管理员实体
     *
     * @param updateDTO
     * @return
     */
    Admin toPoByUpdateStaticDTO(UpdateStatusDTO updateDTO);

    /**
     * 将管理员更新密码数据传输对象转换为管理员实体
     *
     * @param updateDTO
     * @return
     */
    @Mapping(target = "password", expression = "java(com.aliang.shopping.util.PasswordUtil.encrypt(updateDTO.getNewPassword()))")
    Admin toPoByUpdatePasswordDTO(UpdatePasswordDTO updateDTO);

    Admin toPoByIdWithPwd(Long id, String password);

    /**
     * 将管理员导入数据传输对象转换为管理员实体
     *
     * @param vo
     * @return
     */
    @Mappings({
            @Mapping(target = "sex", expression = "java(CommonConverter.getNum(vo.getSex(),\"男\"))"),
            @Mapping(target = "typeNum", expression = "java(CommonConverter.getNum(vo.getTypeNum(),\"超级管理员\"))"),
    })
    Admin toPoByImportDTO(AdminImportDTO vo);

    List<Admin> toPoListByImportDTOList(List<AdminImportDTO> list);

    /**
     * 将管理员展示对象转换为管理员导出对象
     *
     * @param vo
     * @return
     */
    @Mappings({
            @Mapping(target = "sex", expression = "java(CommonConverter.getMsg(vo.getSex(),\"男\",\"女\"))"),
            @Mapping(target = "typeNum", expression = "java(CommonConverter.getMsg(vo.getTypeNum(),\"超级管理员\",\"管理员\"))"),
            @Mapping(target = "status", expression = "java(CommonConverter.getMsg(vo.getStatus(),\"正常\",\"禁用\"))"),
    })
    AdminExportVO toExportVO(AdminVO vo);

    List<AdminExportVO> toImportDTOList(List<AdminVO> list);

    @Mapping(target = "role", expression = "java(CommonConverter.getAdminRoleNum(admin.getTypeNum()))")
    CommonUserInfoVO toUserInfoVO(Admin admin);
}
